package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.entity.SysProject;
import com.ruoyi.system.domain.SysUserProject;

import java.util.List;


/**
 * 项目管理Service接口
 * 
 * @author sux
 * @date 2021-09-03
 */
public interface ISysProjectService 
{
    /**
     * 查询项目管理
     * 
     * @param projectId 项目管理ID
     * @return 项目管理
     */
    public SysProject selectSysProjectById(Long projectId);

    /**
     * 查询项目管理列表
     * 
     * @param sysProject 项目管理
     * @return 项目管理集合
     */
    public List<SysProject> selectSysProjectList(SysProject sysProject);

    /**
     * 新增项目管理
     * 
     * @param sysProject 项目管理
     * @return 结果
     */
    public int insertSysProject(SysProject sysProject);

    /**
     * 修改项目管理
     * 
     * @param sysProject 项目管理
     * @return 结果
     */
    public int updateSysProject(SysProject sysProject);

    /**
     * 批量删除项目管理
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysProjectByIds(String ids);

    /**
     * 删除项目管理信息
     * 
     * @param projectId 项目管理ID
     * @return 结果
     */
    public int deleteSysProjectById(Long projectId);






    /**
     * 根据用户ID查询项目
     *
     * @param userId 用户ID
     * @return 项目列表
     */
    public List<SysProject> selectProjectsByUserId(Long userId);

    /**
     * 查询所有项目
     *
     * @return 项目列表
     */
    public List<SysProject> selectProjectAll();



    /**
     * 修改数据权限信息
     *
     * @param project 项目信息
     * @return 结果
     */
    public int authDataScope(SysProject project);

    /**
     * 校验项目名称是否唯一
     *
     * @param project 项目信息
     * @return 结果
     */
    public String checkProjectNameUnique(SysProject project);

    /**
     * 校验项目权限是否唯一
     *
     * @param project 项目信息
     * @return 结果
     */
    public String checkProjectKeyUnique(SysProject project);

    /**
     * 校验项目是否允许操作
     *
     * @param project 项目信息
     */
    public void checkProjectAllowed(SysProject project);

    /**
     * 通过项目ID查询项目使用数量
     *
     * @param projectId 项目ID
     * @return 结果
     */
    public int countUserProjectByProjectId(Long projectId);


    /**
     * 取消授权用户项目
     *
     * @param userProject 用户和项目关联信息
     * @return 结果
     */
    public int deleteAuthUser(SysUserProject userProject);

    /**
     * 批量取消授权用户项目
     *
     * @param projectId 项目ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int deleteAuthUsers(Long projectId, String userIds);

    /**
     * 批量选择授权用户项目
     *
     * @param projectId 项目ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertAuthUsers(Long projectId, String userIds);

    /**
     * 通过UserId查找绑定的项目
     * @param userId
     * @return
     */
    public List<SysUserProject> selectUserProjectsByUserId(Long userId);

    /**
     * 获取所有项目给管理员用户
     * @param userId
     * @return
     */
    public List<SysUserProject> selectAllUserProjects(Long userId);



//   public void checkUserAllowed(SysProject project);

    /**
     * 项目状态修改
     *
     * @param project 项目信息
     * @return 结果
     */
    public int changeStatus(SysProject project);
}
